package com.xbts.system.service;

import java.util.List;
import java.util.Map;

import com.baomidou.mybatisplus.extension.service.IService;
import com.huaweicloud.sdk.ecs.v2.model.ServerId;
import com.xbts.common.enums.ServerStatusEnum;
import com.xbts.system.domain.CnUserCloudServersRelation;
import com.xbts.system.domain.vo.CnUserCloudServersRelationVO;

/**
 * 用户-弹性云服务器关系Service接口
 * 
 * @author xbts
 * @date 2023-08-03
 */
public interface ICnUserCloudServersRelationService  extends IService<CnUserCloudServersRelation> {

    /**
     * 查询用户-弹性云服务器关系列表
     *
     * @param cnUserCloudServersRelation 用户-弹性云服务器关系
     * @return 用户-弹性云服务器关系集合
     */
    List<CnUserCloudServersRelation> selectCnUserCloudServersRelationList(CnUserCloudServersRelation cnUserCloudServersRelation);

    /**
     * 查询用户-弹性云服务器关系
     *
     * @param userId 用户-弹性云服务器关系主键
     * @return 用户-弹性云服务器关系
     */
     CnUserCloudServersRelation selectCnUserCloudServersRelationByUserId(String userId);


    /**
     * 新增用户-弹性云服务器关系
     *
     * @param cnUserCloudServersRelation 用户-弹性云服务器关系
     * @return 结果
     */
     boolean insertCnUserCloudServersRelation(CnUserCloudServersRelation cnUserCloudServersRelation);

    /**
     * 修改用户-弹性云服务器关系
     *
     * @param cnUserCloudServersRelation 用户-弹性云服务器关系
     * @return 结果
     */
     boolean updateCnUserCloudServersRelation(CnUserCloudServersRelation cnUserCloudServersRelation);

    /**
     * 批量删除用户-弹性云服务器关系
     *
     * @param userIds 需要删除的用户-弹性云服务器关系主键集合
     * @return 结果
     */
     boolean deleteCnUserCloudServersRelationByUserIds(List<String> userIds);

    /**
     * 删除用户-弹性云服务器关系信息
     *
     * @param userId 用户-弹性云服务器关系主键
     * @return 结果
     */
     boolean deleteCnUserCloudServersRelationByUserId(String userId);

    /**
     * 批量修改云服务器状态
     * @param servers 云服务器id列表
     * @param statusEnum 云服务器状态
     */
    void updateCloudServiceStatusByServerIds(List<ServerId> servers, ServerStatusEnum statusEnum);

    /**
     * 统计云服务器状态
     * @param cnUserCloudServersRelation 用户-弹性云服务器关系
     * @return 云服务器状态统计
     */
    List statisticsStatus(CnUserCloudServersRelation cnUserCloudServersRelation);


    /**
     * 购买相同配置
     */
    void buyAgain(String cloudServersId);

    long selectCnUserCloudServersRelationCount(CnUserCloudServersRelation cnUserCloudServersRelation);

    /**
     * 自动续费
     */
    void autoRenew(String id);

}
